package cn.edu.jxust.core.domain.repository.impl;

import cn.edu.jxust.common.domain.entity.AirType;
import cn.edu.jxust.common.domain.dto.AirTypeVo;
import cn.edu.jxust.core.infrastructure.mapper.AirtypeMapper;
import cn.edu.jxust.common.response.Result;
import cn.edu.jxust.common.response.ResultUtils;
import cn.edu.jxust.common.response.enums.ResultStatus;
import cn.edu.jxust.core.domain.repository.AirtypeService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author QiuKangming
 * @since 2020-06-29
 */
@Service
public class AirtypeServiceImpl extends ServiceImpl<AirtypeMapper, AirType> implements AirtypeService {

    @Resource
    private AirtypeMapper airtypeMapper;

    /**
     * 查询监测气体列表/根据气体名称查询
     * @param airName 气体名称
     * @param page 第几页
     * @param size 一页几条数据
     * @return IPage<AirType>
     */
    @Override
    public IPage<AirType> listAirType(String airName, Integer page, Integer size) {

        QueryWrapper<AirType> wrapper = null;
        if(airName != null && !airName.equals("")){
            wrapper = new QueryWrapper<>();
            wrapper.eq("air_name", airName);
        }
        return airtypeMapper.selectPage(new Page<>(page, size), wrapper);

    }

    /**
     * 根据气体名称获得气体id号
     * @param airName 气体名称
     * @return Integer
     */
    @Override
    public Integer getIdByAirName(String airName) {

        return airtypeMapper.getIdByAirName(airName);

    }

    /**
     * 根据 id 获取气体名称
     * @param id id号
     * @return String
     */
    @Override
    public String getAirNameById(Integer id) {

        return airtypeMapper.getAirNameById(id);

    }

    /**
     * 根据监测气体名称查看是否存在该检测气体
     * @param airName 气体名称
     * @return int
     */
    @Override
    public boolean isExistAirType(String airName) {

        return airtypeMapper.isExistAirType(airName) > 0;

    }

    /**
     * 添加监测气体
     * @param airTypeVo 监测气体对象
     * @return Result
     */
    @Override
    public Result addAirType(AirTypeVo airTypeVo) {

        //检查是否含有该气体
        if(this.isExistAirType(airTypeVo.getAirName().toUpperCase())){
            return ResultUtils.resultWithoutData(ResultStatus.FAILED, "该气体信息已存在, 添加失败");
        }

        return airtypeMapper.insert(
            AirType.builder()
                    .airName(airTypeVo.getAirName().toUpperCase())
                    .editor(airTypeVo.getEditor())
                    .build()
        ) == 1
                ? ResultUtils.resultWithoutData(ResultStatus.SUCCESS, "添加监测气体信息成功")
                : ResultUtils.resultWithoutData(ResultStatus.FAILED, "该添加监测气体信息失败");

    }
}
